import { Notification } from '@alifd/next';
import { history } from 'ice';
import type { AxiosError } from 'axios';

const codeMessage: { [key: number]: string } = {
  200: '',
  201: '新建或修改数据成功。',
  202: '一个请求已经进入后台排队（异步任务）。',
  204: '删除数据成功。',
  400: '请求参数异常，类型不正确。',
  401: '登录已失效',
  403: '没有权限访问此内容',
  404: '访问地址不存在',
  405: '请求方式不正确',
  406: '请求的格式不可得。',
  410: '请求的资源被永久删除，且不会再得到的。',
  422: '当创建一个对象时，发生一个验证错误。',
  500: '服务器发生错误。',
  502: '网关错误。',
  503: '服务不可用，服务器暂时过载或维护。',
  504: '网关超时。',
  999: '未知错误',
};

const processingErr = (error: AxiosError) => {
  const code = Number(error?.response?.data?.code || error?.response?.status || error?.code || 999);
  const message = error?.response?.data?.msg || codeMessage[code];
  error.message = message;
  error.code = `${code}`;
  Notification.error({
    title: '请求出错',
    content: message,
  });
  if (/^(403)\d*$/.test(error.code)) {
    history?.push('/feedback/403');
  }
  if (/^(401)\d*$/.test(error.code)) {
    localStorage.removeItem('token');
    sessionStorage.removeItem('token');
    history?.replace('/user/login');
  }
};

export { processingErr };
